package com.simon.mctm.biz.sys.service;

import com.simon.mctm.base.PageResult;
import com.simon.mctm.biz.sys.bean.User;
import com.baomidou.mybatisplus.service.IService;
import com.simon.mctm.biz.sys.dto.UserDto;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author simon
 * @since 2018-06-07
 */
public interface UserService extends IService<User> {

    /**
     * 添加用户
     * @param userDto 用户数据传输对象
     * @return 条目数
     */
    Integer addUser(UserDto userDto);

    /**
     * 获取指定用户
     * @param id 用户ID
     * @return 用户数据传输对象
     */
    UserDto getUserById(Integer id);


    /**
     * 获取系统用户列表，分页形式
     * @param username 用户名
     * @param status 状态
     * @param pageNum 页码
     * @param pageSize 单页条目数
     * @return 用户列表
     */
    List<UserDto> getUserPagedList(String username, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 根据新用户更新用户信息
     * @param id 当前用户信息
     * @param newUser 新用户信息
     * @return 影响条目数
     */
    Integer updateUser(Integer id,UserDto newUser);


    /**
     * 根据条件获取总条目数和总页数
     * @param username 用户名
     * @param status 状态
     * @param pageSize 单页条目数
     * @return 页数和总条目数对象
     */
    PageResult calPage(String username,Integer status,Integer pageSize);


    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户对象
     */
    User getUserByUsername(String username);

    /**
     * 通过修改用户状态来删除用户---status：2
     * @param id 用户ID
     * @return 影响条目数
     */
    Integer deleteUser(Integer id);

    /**
     * 修改用户的密码
     * @param user 用户对象
     * @return 影响条目数
     */
    Integer changePassword(User user);

    /**
     * 冻结用户
     * @param user  用户对象
     * @return 影响条目数
     */
    Integer freezeUser(User user);

    /**
     * 取消冻结用户
     * @param user  用户对象
     * @return 影响条目数
     */
    Integer unFreezeUser(User user);

    /**
     * 设置用户角色
     * @param id 用户Id
     * @param roleIds 角色Id 1,2,3格式
     * @return 影响条目数
     */
    Integer setRoles(Integer id,String roleIds);

    /**
     * 设置用户部门
     * @param id 用户Id
     * @param deptIds 部门Id 1,2,3格式
     * @return 影响条目数
     */
    Integer setDepts(Integer id,String deptIds);

    /**
     * 根据用户Id获取角色id，输出格式为1,2,3
     * @param id 用户Id
     * @return 影响条目数
     */
    String getRoleId(Integer id);

    /**
     * 根据用户Id获取部门id，输出格式为1,2,3
     * @param id 用户Id
     * @return 影响条目数
     */
    String getDeptId(Integer id);
}
